#include "MenuMultijugador.h"
#include "../common/Conversor.h"
#include <iostream>
#include "../common/AdministradorDeNiveles.h"

MenuMultijugador::MenuMultijugador(MainJuegoLocal *m)
{	
	AdministradorDeNiveles admin;
	list<string> l = admin.nivelesHabilitados();
	
	this->m = m;
	Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create();
	refBuilder->add_from_file("./Cliente/MenuMultijugador.glade");

	refBuilder->get_widget("MenuMultijugador", main);
	
	refBuilder->get_widget("Refrescar", botonRefresh);
	botonRefresh->signal_clicked().connect(sigc::mem_fun(*this, &MenuMultijugador::on_botonRefresh_clicked));
	
	refBuilder->get_widget("Crear", botonCrear);
	botonCrear->signal_clicked().connect(sigc::mem_fun(*this, &MenuMultijugador::on_buttonCrear_clicked));
	
	refBuilder->get_widget("Unirse", botonUnirse);
	botonUnirse->signal_clicked().connect(sigc::mem_fun(*this, &MenuMultijugador::on_buttonUnirse_clicked));
	
	refBuilder->get_widget("treePartidas", treePartidas);
	
	refBuilder->get_widget("Jugadores", botonJugadores);
	botonJugadores->set_range(1,4);
	botonJugadores->set_increments(1,1);
	
	refBuilder->get_widget("Nivel", botonNivel);
	botonNivel->set_range(1, l.size());
	botonNivel->set_increments(1,1);
	
	main->show_all_children();
	
	colTree1.add(colId);
	colTree1.add(Libres);
	colTree1.add(Nivel);
	refTree1 = Gtk::ListStore::create(colTree1);
	treePartidas->set_model(refTree1);
	treePartidas->append_column("Partidas", colId);
	treePartidas->append_column("Lugares Libres", Libres);
	treePartidas->append_column("Nivel", Nivel);
	on_botonRefresh_clicked();
	
}

void MenuMultijugador::correr() {
	Gtk::Main::run(*main);
}

void MenuMultijugador::on_botonRefresh_clicked(){
	AdministradorDeNiveles admin;
	std::vector<short> vector = m->getPartidas();
	refTree1->clear();
	for (size_t i = 0; i < vector.size();) {
		short idPartida = vector[i++];
		short lugLibres = vector[i++];
		short codNivel = vector[i++];
		if (lugLibres > 0 && admin.nivelHabilitado(codNivel)) {
			Gtk::TreeModel::Row row = *(refTree1->append());
			row[colId] = Conversor::shortToString(idPartida);
			row[Libres] = Conversor::shortToString(lugLibres);
			row[Nivel] = Conversor::shortToString(codNivel);
		}
	}
}
void MenuMultijugador::on_buttonCrear_clicked(){
	main->hide();
	m->crearPartidaMultijugador((int)(botonNivel->get_value()), botonJugadores->get_value());
}
void MenuMultijugador::on_buttonUnirse_clicked(){

	if (treePartidas->get_selection()->count_selected_rows() > 0) {
	Gtk::TreeModel::iterator it =treePartidas->get_selection()->get_selected();	
	Gtk::TreeRow row = (Gtk::TreeRow)*it;
	std::string id = Glib::locale_from_utf8(row[colId]);
	std::string nivel = Glib::locale_from_utf8(row[Nivel]);
	
	main->hide();
	m->unirsePartidaMultijugador(atoi(id.c_str()),atoi(nivel.c_str()));
	}
}


MenuMultijugador::~MenuMultijugador()
{
	
}

